package com.vhall.component.entity.pay.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.vhall.component.framework.common.annotation.ParamName;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @author xuyongzheng
 * @since 2020/10/22
 **/
@Data
public class PaymentParamVO extends PayParamVO implements Serializable {

    /**
     * 支付渠道
     */
    @Pattern(regexp = "(WEIXIN)|(ALIPAY)", message = "channel取值范围:WEIXIN,ALIPAY")
    private String channel;

    /**
     *
     */
    @JsonProperty("service_code")
    @ParamName("service_code")
    @Pattern(regexp = "(QR_PAY)|(H5_PAY)|(CASHIER)|(JSAPI)", message = "service_code取值范围:QR_PAY,H5_PAY,CASHIER,JSAPI")
    private String serviceCode;

    /**
     * 商户订单号，唯一，建议各个应用使用不同的前缀
     */
    @JsonProperty("biz_order_no")
    @ParamName("biz_order_no")
    @Length(min = 1, max = 32, message = "biz_order_no长度为1-32位")
    @NotBlank(message = "biz_order_no参数错误")
    private String bizOrderNo;

    /**
     * 订单金额，单位 元
     */
    @JsonProperty("total_fee")
    @ParamName("total_fee")
    @DecimalMin(value = "0.01", message = "金额不能小于0.01")
    @NotNull(message = "total_fee参数错误")
    private BigDecimal totalFee;

    /**
     * 订单标题
     */
    @NotBlank(message = "title参数错误")
    @Length(min = 1, max = 32, message = "title长度为1-32位")
    private String title;

    /**
     * 订单详情
     */
    @Length(max = 2000)
    private String detail;

    /**
     * 异步通知地址，如果app_id设置默认回调地址，则不需要传此参数
     */
    @JsonProperty("notify_url")
    @ParamName("notify_url")
    @Length(max = 255)
    private String notifyUrl;


    /**
     * 订单展示地址，某些渠道选填，如支付宝
     */
    @JsonProperty("show_url")
    @ParamName("show_url")
    @Length(max = 255)
    private String showUrl;

    /**
     * 备注
     */

    @ParamName("remark")
    @Length(max = 255)
    private String remark;

    /**
     * 微信用户id， 使用微信内置浏览器, service_code=JSAPI，唤起支付，此值必传
     */
    @JsonProperty("open_id")
    @ParamName("open_id")
    @Length(max = 255)
    private String openId;


    /**
     * 附加数据，支付结果通知会携带这个参数
     */
    @Length(max = 250)
    private String optional;

    /**
     * 用途
     */
    @Length(max = 20)
    private String usage;

    /**
     * 当使用微信h5 支付的时候必填，输入的值为用户的真实ip，如果ip不正确，支付页面会提示不安全并且无法进行支付
     */
    @JsonProperty("client_ip")
    @ParamName("client_ip")
    private String clientIp;
}
